package top.zhimingw.tankgame2;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

/**
 * @Author:zhimingw
 * @Version 1.0
 * 坦克大战的绘图区
 */
public class MyPanel extends JPanel implements KeyListener {
    //定义我的坦克
    Hero hero = null;
    //定义敌人坦克
    Vector<EnemyTank> enemyTanks = new Vector<>();
    int enemyTankSize = 3;
    public MyPanel(){
        hero = new Hero(100,100,0);//初始化自己的坦克
        hero.setSpeed(2);
        for(int i=0;i<enemyTankSize;i++){
            enemyTanks.add(new EnemyTank(100*(i+1),0,1));
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0,0,1000,750);
        //画出坦克
        drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),1);
        //画出敌人的坦克
        for(int i=0;i<enemyTankSize;i++){
            EnemyTank enemyTank = enemyTanks.get(i);
            drawTank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirect(),0);
        }
    }

    //画出坦克
    /*
    * @param direct 坦克方向
    * @param type 坦克类型
    * */
    public void drawTank(int x,int y,Graphics g,int direct,int type){
        switch (type){
            case 0: //敌人的坦克
                g.setColor(Color.cyan);
                break;
            case 1: //我们的坦克
                g.setColor(Color.yellow);
                break;
        }
        //根据坦克的方向，来绘制坦克
        switch (direct){
            case 0://方向向上
                g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子
                g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子
                g.fill3DRect(x+10,y+10,20,40,false);//画出坦克中间正方形的
                g.fillOval(x+10,y+20,20,20);//坦克中间圆形
                g.drawLine(x+20,y+30,x+20,y);//画出炮筒
                break;
            case 1://方向向右
                g.fill3DRect(x,y,60,10,false);//画出坦克左边的轮子
                g.fill3DRect(x,y+30,60,10,false);//画出坦克右边的轮子
                g.fill3DRect(x+10,y+10,40,20,false);//画出坦克中间正方形的
                g.fillOval(x+20,y+10,20,20);//坦克中间圆形
                g.drawLine(x+30,y+20,x+60,y+20);//画出炮筒
                break;
            case 2://方向向下
                g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子
                g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子
                g.fill3DRect(x+10,y+10,20,40,false);//画出坦克中间正方形的
                g.fillOval(x+10,y+20,20,20);//坦克中间圆形
                g.drawLine(x+20,y+30,x+20,y+60);//画出炮筒
                break;
            case 3://方向向左边
                g.fill3DRect(x,y,60,10,false);//画出坦克左边的轮子
                g.fill3DRect(x,y+30,60,10,false);//画出坦克右边的轮子
                g.fill3DRect(x+10,y+10,40,20,false);//画出坦克中间正方形的
                g.fillOval(x+20,y+10,20,20);//坦克中间圆形
                g.drawLine(x+30,y+20,x,y+20);//画出炮筒
                break;
            default:
                System.out.println("不处理");
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println((char)e.getKeyCode());
        if(e.getKeyCode()==KeyEvent.VK_W){
           //改变坦克的方向
            hero.setDirect(0);
           //修改坦克的坐标
            hero.moveUp();
        }else if(e.getKeyCode()==KeyEvent.VK_D){
            hero.setDirect(1);
            hero.moveRight();
        }else if(e.getKeyCode()==KeyEvent.VK_S){
            hero.setDirect(2);
            hero.moveDown();
        }else if(e.getKeyCode()==KeyEvent.VK_A){
            hero.setDirect(3);
            hero.moveLeft();
        }
        //面板重绘
        this.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}
